﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using turnos.core.util;
using turnos.core.modelo;

namespace turnos.escritorio
{
    public partial class frmRecepcionTurnos : Form
    {
        private AgendaDeTurnos _agenda;
        private List<AgendaDeTurnos> agenda;

        public AgendaDeTurnos AgendaSeleccionada
        {
            get { return _agenda; }
            set { _agenda = value; }
        }
        public frmRecepcionTurnos()
        {
            InitializeComponent();
        }

        private List<DataGridViewColumn> columnas_agenda()
        {
            List<DataGridViewColumn> retorno = new List<DataGridViewColumn>();

            DataGridViewColumn c = new DataGridViewTextBoxColumn();
            c.Name = "Identificacion";
            c.DataPropertyName = "IdTurno";
            c.Visible = false;
            retorno.Add(c);

            DataGridViewColumn c1 = new DataGridViewTextBoxColumn();
            c1.Name = "Fecha";
            c1.DataPropertyName = "Fecha";

            retorno.Add(c1);

            DataGridViewColumn c2 = new DataGridViewTextBoxColumn();
            c2.Name = "Hora Inicio";
            c2.DataPropertyName = "FechayHora";
            c2.DefaultCellStyle.Format = "hh:mm";

            retorno.Add(c2);

            DataGridViewColumn c3 = new DataGridViewTextBoxColumn();
            c3.Name = "Solicitante";
            c3.Width = 300;
            c3.DataPropertyName = "SolicitanteDescripcion";

            retorno.Add(c3);

            DataGridViewColumn c4 = new DataGridViewTextBoxColumn();
            c4.Name = "Estado";
            c4.DataPropertyName = "EstadoDescripcion";

            retorno.Add(c4);

            DataGridViewColumn c5 = new DataGridViewTextBoxColumn();
            c5.Name = "Puesto";
            c5.DataPropertyName = "Puesto";

            retorno.Add(c5);

            return retorno;
        }



        private void cargarGrilla()
        {
            try
            {
                cargaAgenda();
                dgvAgenda.DataSource = agenda;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }


        private void frmAtencionTurnos_Load(object sender, EventArgs e)
        {
            try
            {

                Modelo.TurnosModelo.ConfigurarDGV(dgvAgenda, columnas_agenda());

                dtpFecha.Value = DateTime.Now;
                cbBusquedas.Enabled = true;
                cargarGrilla();

                
            }
            catch (Exception ex)
            {
                cbBusquedas.Enabled = false;
                MessageBox.Show(ex.Message, "Error");
            }

        }
        /*
        private void dgvAgenda_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                seleccionaAgenda();
                if (AgendaSeleccionada.RefEstado != turnosCts.ID_ESTADO_LIBRE)
                    throw new turnosException("No esta libre el turno");
                //Abrir Carga de Solicitante
                frmAMSolicitante frmSol = new frmAMSolicitante();
                frmSol.AgendaSeleccionada = AgendaSeleccionada;
                frmSol.ShowDialog();
                cargarGrilla();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }

        }

        private void seleccionaAgenda()
        {
            int idTurno = int.Parse(dgvAgenda.CurrentRow.Cells[0].Value.ToString());
            AgendaSeleccionada = Modelo.TurnosModelo.TurnosC.TraerAgendaPorId(idTurno);
        }
        */

        private void dtpFecha_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                cargarGrilla();
            }
            catch (Exception ex)
            {
                cbBusquedas.Enabled = false;
                MessageBox.Show(ex.Message, "Error");
            }

        }


        private void button2_Click(object sender, EventArgs e)
        {
            cargarGrilla();
        }

        private void dgvAgenda_DoubleClick(object sender, EventArgs e)
        {
            if (dgvAgenda.CurrentRow != null)
            {
                int idTurno = int.Parse(dgvAgenda.CurrentRow.Cells[0].Value.ToString());
                AgendaSeleccionada = Modelo.TurnosModelo.TurnosC.TraerAgendaPorId(idTurno);
                if (AgendaSeleccionada.RefEstado == turnosCts.ID_ESTADO_A_ATENDER)
                {
                    AgendaSeleccionada.Puesto = 0;
                    AgendaSeleccionada.RefEstado = turnosCts.ID_ESTADO_PENDIENTE;
                }
                else
                {
                    frmAsignaBox frm = new frmAsignaBox();
                    frm.ShowDialog();
                    if (frm.Acepto)
                    {
                        AgendaSeleccionada.Puesto = byte.Parse(frm.Puesto.ToString());
                        AgendaSeleccionada.RefEstado = turnosCts.ID_ESTADO_A_ATENDER;
                    }

                }
                Modelo.TurnosModelo.TurnosC.GuardarAgenda(AgendaSeleccionada, Modelo.TurnosModelo.Usuario.Usuario);
                cargarGrilla();
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                if (cbBusquedas.Text == "")
                    throw new turnosException("Seleccione un tipo de busqueda");
                if (cbBusquedas.Text == "Por Documento")
                    filtrarPorDocumento(textBox1.Text);
                if (cbBusquedas.Text == "Por Apellido")
                    filtrarPorNombre(textBox1.Text);
                if (cbBusquedas.Text == "Por Numero")
                    filtrarPorNumero(textBox1.Text);
            }
            catch (Exception m)
            {
                MessageBox.Show(m.Message);
            }

        }

        private void filtrarPorDocumento(string p)
        {
            cargaAgenda();
            agenda = (from a in agenda
                      where a.Solicitantes.NroDocumento.Equals(p)
                      select a).ToList();
            dgvAgenda.DataSource = agenda;
        }

        private void cargaAgenda()
        {
            agenda = Modelo.TurnosModelo.TurnosC.TraerAgendaPorFecha(dtpFecha.Value, turnosCts.ID_ESTADO_PENDIENTE, null);
            List<AgendaDeTurnos> agenda2 = Modelo.TurnosModelo.TurnosC.TraerAgendaPorFecha(dtpFecha.Value, turnosCts.ID_ESTADO_A_ATENDER, null);
            foreach (var item in agenda2)
            {
                agenda.Add(item);
            }
        }

        private void filtrarPorNombre(string p)
        {
            cargaAgenda();
            agenda = (from a in agenda
                      where a.Solicitantes.ApeyNom.Contains(p)
                      select a).ToList();
            dgvAgenda.DataSource = agenda;
        }

        private void filtrarPorNumero(string p)
        {
            cargaAgenda();
            agenda = (from a in agenda
                      where a.Numero.Equals(p)
                      select a).ToList();
            dgvAgenda.DataSource = agenda;
        }
    }
}
